home *** CD-ROM | disk | FTP | other *** search
- {
- This program example will demonstrate how to save your
- desktop using a stream. It will give you the ability
- to insert windows on the destop and save the state in a
- .DSK file and load them from the file to restore its'
- state. Streams REQURE registration of decendant object
- types. Many fall folly to using objects in a stream
- that have not been registered.
-
- }
-
- Program Simple_Stream;
-
- Uses Objects, Drivers, Views, Menus, App;
-
- Type
- PMyApp = ^MyApp;
- MyApp = Object(TApplication)
- Constructor Init;
- Procedure InitStatusLine; Virtual;
- Procedure InitMenuBar; Virtual;
- Procedure HandleEvent(var Event: TEvent); Virtual;
- Procedure NewWindow;
- Destructor Done; Virtual;
- End;
-
- PMyWindow = ^TMyWindow;
- TMyWindow = Object(TWindow)
- Constructor Init(Bounds: TRect; WinTitle: String; WindowNo: Word);
- End;
-
- PMyDeskTop = ^TMyDeskTop;
- TMyDeskTop = object(TDeskTop)
- Windw: PMyWindow;
- Constructor Load(var S:TBufStream);
- Procedure Store(var S: TBufStream); Virtual;
- End;
-
- Const
- cmNewWin = 101;
- cmSaveDesk = 102;
- cmLoadDesk = 103;
-
- RMyDeskTop: TstreamRec = (
- ObjType : 1001;
- VmtLink : Ofs(TypeOf(TMyDeskTop)^);
- Load : @TMyDeskTop.Load;
- Store : @TMyDeskTop.Store
- );
-
- RMyWindow: TstreamRec = (
- ObjType : 1002;
- VmtLink : Ofs(TypeOf(TMyWindow)^);
- Load : @TMyWindow.Load;
- Store : @TMyWindow.Store
- );
-
- Procedure SaveDeskStream;
- Var
- SaveFile:TBufStream;
- Begin
- SaveFile.Init('Rdesk.dsk',stCreate,1024);
- SaveFile.Put(DeskTop);
- If Savefile.Status <>0 then
- write('Bad Save',Savefile.Status);
- SaveFile.Done;
- End;
-
- Procedure LoadDeskStream;
- Var
- SaveFile:TBufStream;
- Begin
- SaveFile.Init('Rdesk.dsk',stOpen,1024);
- DeskTop^.insert(PMyDeskTop(SaveFile.Get));
- If Savefile.Status <>0 then
- write('Bad Load',Savefile.Status)
- else
- DeskTop^.ReDraw;
- SaveFile.Done;
- End;
-
- { ** MyApp **}
- Constructor MyApp.Init;
- Begin
- TApplication.Init;
- RegisterType(RMyDesktop);
- RegisterType(RDesktop);
- RegisterType(Rwindow);
- RegisterType(RMywindow);
- RegisterType(RFrame);
- RegisterType(RMenuBar);
- RegisterType(RStatusLine);
- RegisterType(RBackground);
- End;
-
- Destructor MyApp.Done;
- Begin
- TApplication.Done;
- End;
-
- Procedure MyApp.InitMenuBar;
- Var
- R: TRect;
- Begin
- GetExtent(R);
- R.B.Y := R.A.Y + 1;
- MenuBar := New(PMenuBar, Init(R, NewMenu(
- NewSubMenu('~F~ile', hcNoContext, NewMenu(
- NewItem('~N~ew', 'F4', kbF4, cmNewWin, hcNoContext,
- NewLine(
- NewItem('E~x~it', 'Alt-X', kbAltX, cmQuit, hcNoContext,
- Nil)))),
- NewSubMenu('~D~eskTop', hcNoContext, NewMenu(
- NewItem('~S~ave Desktop','',kbF2,cmSaveDesk,hcNoContext,
- NewItem('~L~oad Desktop','',kbF3,cmLoadDesk,hcNoContext,
- nil))),nil)))));
- End;
-
- Procedure MyApp.InitStatusLine;
- Var
- R: TRect;
- Begin
- GetExtent(R);
- R.A.Y := R.B.Y - 1;
- StatusLine := New(PStatusLine, Init(R,
- NewStatusDef(0, $FFFF,
- NewStatusKey('', kbF10, cmMenu,
- NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit,
- NewStatusKey('~F4~ New', kbF4, cmNewWin,
- NewStatusKey('~Alt-F3~ Close', kbAltF3, cmClose,
- nil)))),
- nil)));
- End;
-
- Procedure MyApp.HandleEvent(var Event: TEvent);
- Begin
- TApplication.HandleEvent(Event);
- if Event.What = evCommand then
- Begin
- Case Event.Command of
- cmNewWin: NewWindow;
- cmSaveDesk:SaveDeskStream;
- cmLoadDesk:LoadDeskStream;
- else
- Exit;
- End;
- ClearEvent(Event);
- End;
- End;
-
- Procedure MyApp.NewWindow;
- Var
- Window:PMyWindow;
- R: TRect;
- Begin
- R.Assign(0, 0, 24, 7);
- R.Move(Random(55), Random(16));
- Window := New(PMyWindow, Init(R, 'Demo Window', 1));
- DeskTop^.Insert(Window);
- End;
-
- { ** MyDeskTop **}
- Constructor TMyDeskTop.Load(Var S: TBufStream);
- Begin
- TDeskTop.Load(S);
- GetSubViewPtr(S,Windw);
- End;
-
- Procedure TMyDeskTop.Store(Var S: TBufStream);
- Begin
- TDeskTop.Store(S);
- PutSubViewPtr(S,Windw);
- End;
-
- { ** MyWindow **}
- Constructor TMyWindow.Init(Bounds: TRect; WinTitle: String; WindowNo: Word);
- Begin
- TWindow.init(Bounds,WinTitle,WindowNo);
- End;
-
- { Main Program }
- Var
- MyTApp:MyApp;
-
- Begin
- MyTApp.Init;
- MyTApp.Run;
- MyTApp.Done;
- End.